<?php
class Lignes extends CI_Controller {
	private $ncommande;
	private $dcommande;
	
	public function index($page = 'lignes') {
		if ( ! file_exists('application/views/lignes/'.$page.'.php'))
		{
			// Whoops, we don't have a page for that!
			show_404();
		}
		
		if(!isset($this->session->userdata['id'])) {
			show_error("Page interdite sans identification !!");
		}
        
		$this->ncommande = $this->session->userdata['NCommande']; // On sauve le N° de commande dans la classe
		$this->load->model('commandes_model', 'DBCommande', TRUE); // On va lire la date dans la base de données
		$where = array('id' => $this->ncommande);
		$dc = $this->DBCommande->read('date', $where);
		$dca = $dc->result_array();
		
		$this->load->helper('form');
		
		$aData = array(
			'set_columns' => array(
				array(
					'label' => 'Code',
					'name' => 'code',
					'width' => 60,
					'size' => 10,
					'align' => 'right'
				),
				array(
					'label' => 'Libell&eacute;',
					'name' => 'libelle',
					'width' => 550,
					'size' => 10
				),
				array(
					'label' => 'Poids (g)',
					'name' => 'poids',
					'width' => 60,
					'size' => 10,
					'align' => 'right'
				),
				array(
					'label' => 'Quantit&eacute;',
					'name' => 'nombre',
					'width' => 60,
					'size' => 3,
					'align' => 'right',
					'formatter' => 'integer',
					'editable' => true
				),
				array(
					'label' => 'PU TTC',
					'name' => 'pu',
					'width' => 80,
					'size' => 10,
					'formatter' => 'currency'
				),
				array(
					'label' => 'Montant',
					'name' => 'montant',
					'width' => 90,
					'align' => 'right',
					'size' => 10,
					'formatter' => 'currency'
				),
				array(
					'label' => 'categorie',
					'name' => 'categorieId',
					'width' => 90,
				    'hidden' => true,
					'align' => 'left',
					'size' => 10
				),				
				array(
					'label' => 'Catlibelle',
					'name' => 'catlibelle',
					'width' => 90,
				    'hidden' => true,
					'align' => 'left',
					'size' => 10
				)
			),
			'div_name' => 'lignes_commande_grid',
			'source' => 'index.php/lignes/lignesListe/',
			'sort_name' => 'id',
			'caption' => 'Commande N\260 '.$this->ncommande.' du '.MySQL2FR($dca['0']['date']),
			'primary_key' => 'id',
			'functionDblClick' => 'dblClick',
			'functionSelectRow' => 'selectRow',
			'pager' => 'pager',
			'loadonce' => 'true',
			'cellEdit' => 'true',
			'cellUrl' => 'index.php/lignes/miseajour',
			'cellsubmit' => 'clientArray',
			'afterSaveCell' => 'function(rowid,name,val,iRow,iCol) { CalculMontant(rowid,name,val,iRow,iCol); }',
			'loadComplete' => 'afterLoading',
			'grid_height' => 450
		);
				

		$data['LignesCommandeGrille'] = buildGrid($aData);
		$data['connecte'] = $this->session->userdata['prenom'].' '.$this->session->userdata['nom'];
		$data['admin'] = $this->session->userdata['admin'];
		$data['uri'] = $this->uri->segment(1);
	
		$this->load->library('layout');
		$this->layout->set_titre('RAVIOLES');
		$this->layout->ajouter_css('ravioles');
		$this->layout->ajouter_css('jquery-ui');
		$this->layout->ajouter_css('ui.jqgrid');
		$this->layout->ajouter_js('jquery');
		$this->layout->ajouter_js('jquery.corner');
		$this->layout->ajouter_js('jquery-ui');
		$this->layout->ajouter_js('grid.locale-fr');
		$this->layout->ajouter_js('jquery.jqgrid');
		$this->layout->views('templates/header', $data)
		    		 ->views('lignes/lignes',$data)
		    		 ->view('templates/footer', $data);
			
	}
		
	
	public function LignesListe() {
		buildGridData(array(
				'model' => 'lignes_model',
				'method' => 'lignesJqgrid',
				'pkid' => 'id',
				'columns' => array( 'code', 'libelle', 'poids', 'nombre', 'pu', 'montant', 'categorieId', 'catlibelle' )
				)
		);
	}
	
	function isNumLigne($numCache) {
		$retour = TRUE;
		$Btn = $this->input->post('BLigne');
		$ncommande = $numCache;
		if($Btn == "Modifier la ligne" && $numCache == "NULL") {
			$retour = FALSE;
		}
		return $retour;
	}
	
	function miseajour() {
		
		$btn = $this->input->post('BLignes');
		if($btn == "Retour") { redirect('commandes'); }	
		else { // Exécution de la mise à jour de la commande
			$nb_delete = 0; // Les compteurs pour le statut en boîte de dialogue
			$nb_update = 0;
			$nb_create = 0;
			$this->ncommande = $this->session->userdata['NCommande'];
			log_message('debug', '### Mise à jour commande de '.$this->session->userdata['prenom'].' '.$this->session->userdata['nom'].' ###');
			$this->load->model('lignes_model', 'DBLignes', TRUE); // Chargement du modèle de donnèes pour la table "lignescde"
			$lignes = json_decode($this->input->post('NLigne'), true); // On récupère la ligne JSON située dans le champ hidden "NLigne"
			if($lignes != null) {
				foreach($lignes as $ligne) { // Pour chaque ligne retournée - c'est-à-dire le catalogue entier
					log_message('debug', '### Traitement de l\'article '.$ligne['code'].' : ligne => '.$ligne['_id_'].' | Montant => '.$ligne['montant']);
					$where = array( // Les critères de recherche dans la table "lignescde"
			 				'commandeId' => $this->ncommande,
				 			'articleId'  => $ligne['_id_'],
			 				'userId'     => $this->session->userdata['id']
					);
					if($ligne['nombre'] == 0) { // Ligne à zéro : il faut, soit ne rien faire, soit supprimer une ligne existante
					 	if($this->DBLignes->count($where) > 0) { // L'article est déjà en commande pour ce user et cette commande ?
			 				log_message('debug', '### Suppression de la ligne ! ###');
			 				if($this->DBLignes->delete($where)) { $nb_delete = $nb_delete + 1; }
			 			}
			 		} else { // Ligne avec du contenu : soit elle existe déjà et on update, soit elle n'existe pas et on create
					 	if($this->DBLignes->count($where) > 0) { // La ligne existe déjà : update
			 				log_message('debug', '### Update de la ligne ! ###');
			 				$u = array('nombre' => $ligne['nombre'], 'montant' => $ligne['montant']);
			 				if($this->DBLignes->update($where, $u)) { $nb_update = $nb_update + 1; }
			 			} else { // La ligne n'existe pas : create
					 		log_message('debug', '### Ligne à créer ! ###');
			 				$lcde = array(
					 			'commandeId' => $this->ncommande,
				 				'userId'     => $this->session->userdata['id'],
				 				'articleId'  => $ligne['_id_'],
				 				'nombre'     => $ligne['nombre'],
				 				'montant'    => $ligne['montant']
			 				);
				 			if($this->DBLignes->create($lcde)) { $nb_create = $nb_create + 1; }
				 		}
					}
				}
				// Calcul du total de la commande et écriture dans la base
				$montant = $this->DBLignes->totalCommande($this->ncommande);
				$this->load->model('commandes_model', 'DBCommande', TRUE);
				$this->DBCommande->update($where = array('id' => $this->ncommande), $montant);
				$ligne_a_jour = array(
					'message' => 'Votre commande a &eacute;t&eacute; mise &agrave; jour avec succ&egrave; :<br>'
					.$nb_create.' lignes cr&eacute;&eacute;es.<br>'
					.$nb_update.' lignes mise &agrave; jour.<br>'
					.$nb_delete.' lignes supprim&eacute;es.',
					'mes_aff' => 'O');
				$this->session->set_userdata($ligne_a_jour);
			}
			redirect('/lignes');
		}
	}
}